Praca s viacerymi objektami naraz

Otázka od: Martin Kasman

7. 1. 2004 10:25

Chcem vsetkym objektom typu tpanel vo formulari zmenit farbu na zelenu bez
toho aby som vedel ich nazvy. Ako na to?

Vdaka za kazdu radu.



Odpovedá: Jan Fiala

7. 1. 2004 10:13

7.1.2004 Martin Kasman:
> Chcem vsetkym objektom typu tpanel vo formulari zmenit farbu na zelenu bez
> toho aby som vedel ich nazvy. Ako na to?

for i := 0 to Component.count - 1 do
  if Components[i] is TPanel then
     TPanel(Components[i]).Color := clGreen;

--
Jan Fiala
mailto:jan.fiala@wo.cz


Odpovedá: Jakub Dusek

7. 1. 2004 11:39

var i : Integer
begin
  for i := 0 to Form1.ControlCount - 1 do
    if Form1.Controls[i] is TPanel then
      TPanel(Form1.Controls[i]).Color := clGreen;
end;

Jakub Dusek
----------------------------------------------------------------------
web: http://www.corexpert.com, mobile: +420 604 615 795, ICQ: 86063232
odesilani smsek, vizitek, log a melodii, snadna integrace do Vaseho IS
     => Sms GateKeeper, Sms GateKeeper Service

======================================================================
Wednesday, January 7, 2004, 9:38:26 AM, you wrote:

MK> Chcem vsetkym objektom typu tpanel vo formulari zmenit farbu na zelenu bez
MK> toho aby som vedel ich nazvy. Ako na to?

MK> Vdaka za kazdu radu.




Odpovedá: Lukas Suchanek

7. 1. 2004 10:59

> Chcem vsetkym objektom typu tpanel vo formulari zmenit farbu na zelenu bez
toho aby som vedel ich nazvy. Ako na to?

procedure NastavFarbu(C:TComponent; farba:TColor);
var j:integer;
begin
  with C do
    for J:=0 to ComponentCount-1 do
    begin
      if Components[J] is TPanel then
  TPanel(Components[j]).Color:=Farba;
    end; // for j
end; // NastavFarbu

procedure TMujForm.MojeFunkce;
begin
  NastavFarbu(self, clGreen); // pripadne NastavFarbu(NejakyMujForm,
clGreen);
end;

... aspon doufam, ze to bude takhle nejak, pisu to z hlavy bez kontroly
prekladacem. I kdyby to neslo, tak z toho tu hlavni ideu snad pochopis.
Misto C:TComponent by slo klidne pouzit C:TForm a chodit by to melo taky, s
tim TComponent je to obecnejsi


Odpovedá: Jakub Dusek

7. 1. 2004 11:43

Obecnejsi za predpokladu, ze nejaky TPanel ma jako owner TComponent  
Pouzil bych spis TWinControl, a misto ComponentCount a Components
ControlCount a Controls, potom se neprochazeji zbytecne nevizualni
komponenty.

To vse samozrejme za prodpokladu ze je tam natvrdo "is TPanel", slo by
to napsat jeste obecneji.

Jakub Dusek
----------------------------------------------------------------------
web: http://www.corexpert.com, mobile: +420 604 615 795, ICQ: 86063232
odesilani smsek, vizitek, log a melodii, snadna integrace do Vaseho IS
     => Sms GateKeeper, Sms GateKeeper Service

======================================================================
Wednesday, January 7, 2004, 10:41:02 AM, you wrote:

LS> Misto C:TComponent by slo klidne pouzit C:TForm a chodit by to melo taky, s
LS> tim TComponent je to obecnejsi


Odpovedá: Ondrej Kelle

7. 1. 2004 11:35

>> Chcem vsetkym objektom typu tpanel vo formulari zmenit
>> farbu na zelenu

> var i : Integer
> begin
> for i := 0 to Form1.ControlCount - 1 do
> if Form1.Controls[i] is TPanel then
> TPanel(Form1.Controls[i]).Color := clGreen;
> end;

To bude pracovat len s panelmi, u ktorych je Form1 priamy parent. (Napriklad
panely umiestnene na inych paneloch to nespracuje.)
Aby to bolo kompletne, dalo by sa to napisat rekurzivne, ale to uz je asi
jednoduchsie/rychlejsie pouzit Components.

HTH
TOndrej

Odpovedá: Jakub Dusek

7. 1. 2004 12:17

Pravda. Ja to pouzivam takhle, protoze vetsinou potrebuju podobne veci
menit delat jen v jedne urovni, na celem formu by to udelalo peknej
gulas  

Jakub Dusek
----------------------------------------------------------------------
web: http://www.corexpert.com, mobile: +420 604 615 795, ICQ: 86063232
odesilani smsek, vizitek, log a melodii, snadna integrace do Vaseho IS
     => Sms GateKeeper, Sms GateKeeper Service

======================================================================
Wednesday, January 7, 2004, 11:09:10 AM, you wrote:

OK> To bude pracovat len s panelmi, u ktorych je Form1 priamy parent.
(Napriklad
OK> panely umiestnene na inych paneloch to nespracuje.)
OK> Aby to bolo kompletne, dalo by sa to napisat rekurzivne, ale to uz je asi
OK> jednoduchsie/rychlejsie pouzit Components.

OK> HTH
OK> TOndrej